這一次的 IT 鐵人賽要介紹的題目是 Java Thread,會介紹這個題目的主要原因是因為目前是使用 Java 在開發程式,但是常常沒有考慮到多執行緒 (MultiThread) 的部份所以只常寫一些基本的語法,像是 if、for、while….等等的語法,然後去看了一些 open source 專案的程式碼如:Apache Hadoop、Apache HBase、Apache Kafka…..等等的專案,發現有很多地方會使用到 Thread 的程式碼,總是會看不懂程式的意思和目的,需要花一些時間去找資料了解程式的目的。
因為沒有常用多執行緒 (MultiThread) ,所以在開發程式時常常會忘了共享變數要注意執行緒安全的部份。舉個例子來說如果有 Thread1 和 Thread2 二個執行緒同時要存取一個變數的值,有可能會因為執行Thread 的優先順序不同而造成計算出的結果是無法預期,而使程式會出現一些Bug,通常這些 Bug 不太容易會被發現到,程式要執行到上百次或是上千次才會被發現。如果程式太大在 Debug 上也會有一點難度。這也是我想要利用這 30 天來學習 Java Thread 的目的,避免未來在寫 Thread 程式製造出太多 Bug。
最後一個想介紹寫多執行的理由就是因為現在的 CPU 做的愈來愈好,核心的數量也愈來愈多,想體驗一下有開多執行緒和沒開多執行緒在執行程式速度之間的差別。
以下列出預計在這 30 天內主要會介紹的內容:
Thread 死結(Dead Lock)的問題真的很難解!
所以程式要寫好,才有辦法預防 Dead Lock 的發生
Guraded Suspension Pattern
It should be Guarded
, not Guraded
.
Just a typo :D
打錯字了,我來修改